import java.io.File;
import java.util.ArrayList;

public class MainRandom {

	/**
	 * Le chemin vers le fichier de l'instance a traiter
	 */
	public static String NOM_ENSEMBLE_INSTANCE = "instances";

	/**
	 * Nombre d'executions de l'heuristique random pour calculer un resultat
	 * moyen
	 */
	private final static int NB_TESTS = 1000;

	private final static boolean VERBOSE = false;

	public static void exec() {
		System.out.println("**** Execution de l'heuristique random sur un ensemble d'instances ****");
		try {

			File repEnsemble = new File(NOM_ENSEMBLE_INSTANCE);
			String[] listeInstances = repEnsemble.list();

			for (String nomInstance : listeInstances) {
				String cheminInstance = NOM_ENSEMBLE_INSTANCE + File.separator
						+ nomInstance;

				System.out.println("Instance courante : " + cheminInstance);

				ArrayList<ArrayList<Tache>> meilleureSolution = null;
				int meilleurCout = Integer.MAX_VALUE;
				int sommeCouts = 0;
				for (int i = 0; i < NB_TESTS; i++) {

					// Lecture du fichier d'instance et initialisation
					Algos.initialiserProblemeDepuisUnFichier(cheminInstance);

					// Execution de l'heuristique gloutonne
					Algos.heuristiqueGloutonneRandom();

					// Verification de la solution gloutonne
					ArrayList<ArrayList<Tache>> solution = Algos
							.creerEtVerifierSolution(Algos.listeJobs);

					int cout = Algos.getDateFinProbleme(Algos.listeRessources);
					sommeCouts += cout;

					if (cout < meilleurCout) {
						meilleurCout = cout;
						meilleureSolution = solution;
					}
				}

				if (VERBOSE) {
					// Affichage de la meilleure solution
					System.out.println("Meilleure solution random :");
					Algos.afficherSolution(meilleureSolution);
				}

				System.out.println("    Cout min/moyen : " + meilleurCout
						+ " / " + (sommeCouts / NB_TESTS));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		exec();
	}

}
